package com.atdel.demo06;


/**
 * @BelongsProject: java_study
 * @BelongsPackage: com.atdel.demo06
 * @Author: Del
 * @CreateTime: 2025-03-04  15:41
 * @Description:
 *   Priest类代表一个牧师，牧师可以使用驱邪策略来驱除邪恶。
 *  这个类展示了牧师如何在驱邪过程中使用不同的工具或策略。
 * @Version: 1.0
 */
public class Priest {

    // strategy字段存储了牧师当前采用的驱邪策略。
    private ExorcismStrategy strategy;

    /**
     * 构造函数，初始化牧师的驱邪策略。
     * @param strategy 牧师将要使用的驱邪策略。
     */
    public Priest(ExorcismStrategy strategy) {
        this.strategy = strategy;
    }

    /**
     * 使用指定的驱邪工具进行驱邪。
     * 在驱邪前后，会根据牧师的驱邪策略执行相应的动作。
     * @param tool 要使用的驱邪工具，必须实现AntiEvil接口。
     */
    public void useTool(AntiEvil tool) {
        // 驱邪前的动作，根据当前的驱邪策略执行
        strategy.beforeExorcise();
        // 使用驱邪工具进行驱邪。
        tool.exorcise();
        // 驱邪后的动作，根据当前的驱邪策略执行。
        strategy.afterExorcise();
    }
}
